/**
 * ANSI 转义码颜色配置
 * 用于在终端输出带样式的文本
 */
export const logColor = {
  /** 亮色/加粗 */
  bright: (text: string | number) => `\x1B[1m${text}\x1B[0m`,

  /** 灰色/暗淡 */
  grey: (text: string | number) => `\x1B[2m${text}\x1B[0m`,

  /** 斜体 */
  italic: (text: string | number) => `\x1B[3m${text}\x1B[0m`,

  /** 下划线 */
  underline: (text: string | number) => `\x1B[4m${text}\x1B[0m`,

  /** 反向颜色（前景色和背景色互换） */
  reverse: (text: string | number) => `\x1B[7m${text}\x1B[0m`,

  /** 隐藏文本 */
  hidden: (text: string | number) => `\x1B[8m${text}\x1B[0m`,

  /** 黑色文本 */
  black: (text: string | number) => `\x1B[30m${text}\x1B[0m`,

  /** 红色文本 */
  red: (text: string | number) => `\x1B[31m${text}\x1B[0m`,

  /** 绿色文本 */
  green: (text: string | number) => `\x1B[32m${text}\x1B[0m`,

  /** 黄色文本 */
  yellow: (text: string | number) => `\x1B[33m${text}\x1B[0m`,

  /** 蓝色文本 */
  blue: (text: string | number) => `\x1B[34m${text}\x1B[0m`,

  /** 品红文本 */
  magenta: (text: string | number) => `\x1B[35m${text}\x1B[0m`,

  /** 青色文本 */
  cyan: (text: string | number) => `\x1B[36m${text}\x1B[0m`,

  /** 白色文本 */
  white: (text: string | number) => `\x1B[37m${text}\x1B[0m`,

  /** 亮白色文本 */
  whiteBright: (text: string | number) => `\x1B[97m${text}\x1B[0m`,

  /** 黑色背景 */
  blackBG: (text: string | number) => `\x1B[40m${text}\x1B[0m`,

  /** 红色背景 */
  redBG: (text: string | number) => `\x1B[41m${text}\x1B[0m`,

  /** 绿色背景 */
  greenBG: (text: string | number) => `\x1B[42m${text}\x1B[0m`,

  /** 黄色背景 */
  yellowBG: (text: string | number) => `\x1B[43m${text}\x1B[0m`,

  /** 蓝色背景 */
  blueBG: (text: string | number) => `\x1B[44m${text}\x1B[0m`,

  /** 品红背景 */
  magentaBG: (text: string | number) => `\x1B[45m${text}\x1B[0m`,

  /** 青色背景 */
  cyanBG: (text: string | number) => `\x1B[46m${text}\x1B[0m`,

  /** 白色背景 */
  whiteBG: (text: string | number) => `\x1B[47m${text}\x1B[0m`,

  /** 自定义 RGB 颜色文本 */
  rgb: (text: string | number, r: number, g: number, b: number) =>
    `\x1B[38;2;${r};${g};${b}m${text}\x1B[0m`,

  /** 自定义 RGB 颜色背景 */
  rgbBG: (text: string | number, r: number, g: number, b: number) =>
    `\x1B[48;2;${r};${g};${b}m${text}\x1B[0m`,
};
